Skip to main content

Effects - APIs

lens.useEffect(callback, deps)

  • Description: Runs side effects tied to component lifecycle.
  • Usage:
const TodoList = createComponent(({ lens }) => {
const todos = lens.useRefraction([]);

lens.useEffect(() => {
fetchTodos().then(todos.set);
}, []);
});
  • Features:
    • Dependency-aware
    • Scoped cleanup
    • Similar to React’s useEffect

useOptic(callback, deps)

  • Description: Declarative way to manage reusable side-effect logic.
  • Usage:
import { useOptic, useRefraction } from 'refract';

function useMousePosition() {
const pos = useRefraction({ x: 0, y: 0 });

useOptic(() => {
const handler = e => pos.set({ x: e.clientX, y: e.clientY });
window.addEventListener('mousemove', handler);
return () => window.removeEventListener('mousemove', handler);
}, []);

return pos;
}
  • Features:
    • Dependency-aware caching
    • Reusable logic patterns
    • Animation-ready transitions

useFlash(callback)

  • Description: Runs once after render, useful for animations or DOM measurements.
  • Usage:
lens.useFlash(() => {
console.log('Component rendered!');
});